package com.example.zlw.dem17;



/**
 * @program: Zlw
 * @description:
 * @author: 诸葛龙辰
 * @create: 2022-11-08 10:04
 **/
public class SiModel3 {
    /**1.创建私有化构造函数
     *
     */
    private SiModel3(){}

    /**2.声明一个静态的本类对象
     *
     */
    private volatile static SiModel3 siModel3=new SiModel3();

    /**3.提供一个静态方法，共外界获取该类对象
     *
     * @return
     */
    public static  SiModel3 getSiModel3(){
        /**在锁的外面进行一个判断，也就是在加一层锁判断
         *
         */
        if(siModel3==null){
            /**加锁
             *
             */
            synchronized (SiModel3.class){
                /**4.类加载不会导致该单实例对象被创建，而是首次使用该对象时才会创建
                 *
                 */
                if(siModel3==null){
                    siModel3=new SiModel3();
                }
            }
        }
        return siModel3;
    }
}

/**
 * volatile保证线程之间的可见性
 */
class Look extends  Thread{
    /**用来看线程
     *
     */
    private volatile  boolean flag=true;
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    @Override
    public void run() {
        System.out.println("可以看到进入我们的run方法中");
        while(flag){
        }
    }
}
class Test{
    public static void main(String[] args) throws InterruptedException {
        Look look = new Look();
        look.start();
        Thread.sleep(2000);
        System.out.println("主线程设置look线程的参数来止损失");
        look.setFlag(false);
        /**为flag修改为false
         *
         */
    }

}
